#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include <iostream>
using namespace std;

//int* FindNumsAppearOnce(int* nums, int numsLen, int* returnSize) {
//    // write code here
//    int* arr = (int*)calloc(1000001, sizeof(int));
//    int i = 0;
//    for (i = 0; i < numsLen; i++)
//    {
//        arr[nums[i]]++;
//    }
//    int* p = (int*)malloc(sizeof(int) * 2);
//    int m = 0;
//    for (i = 0; i < 1000001; i++)
//    {
//        if (arr[i] == 1)
//        {
//            p[m] = i;
//            m++;
//        }
//    }
//    *returnSize = 2;
//    return p;
//}

//int* maxInWindows(int* num, int numLen, int size, int* returnSize) {
//    // write code here
//    if (num == NULL || numLen < size || size == 0)
//    {
//        return NULL;
//    }
//    int left = 0;
//    int right = size - 1;
//    int max = 0;
//    int maxnum = 0;
//    int* arr = (int*)malloc(sizeof(int) * numLen);
//    for (int i = left; i <= right; i++)
//    {
//        if (num[i] > max)
//        {
//            max = num[i];
//            maxnum = i;
//        }
//    }
//    int k = 0;
//    for (int n = right; n < numLen; n++)
//    {
//        if (max < num[n])
//        {
//            max = num[n];
//            maxnum = n;
//        }
//        if (maxnum < left)
//        {
//            max = 0;
//            for (int i = left; i <= right; i++)
//            {
//                if (num[i] > max)
//                {
//                    max = num[i];
//                    maxnum = i;
//                }
//            }
//        }
//        arr[k] = max;
//        k++;
//        left++;
//        right++;
//    }
//    *returnSize = k;
//    return arr;
//}

//bool isValid(char* s) {
//    // write code here
//    char p[10000] = { 0 };
//    int sz = strlen(s);
//    if (s[0] == ')' || s[0] == ']' || s[0] == '}' || s == NULL || sz % 2 == 1)
//    {
//        return false;
//    }
//    int k = 0;
//    for (int i = 0; i < sz; i++)
//    {
//        if (s[i] == '[' || s[i] == '{' || s[i] == '(')
//        {
//            p[k++] = s[i];
//        }
//        if (s[i] == ')' || s[i] == ']' || s[i] == '}')
//        {
//            if (s[i] == ')' && p[k - 1] != '(')
//            {
//                return false;
//            }
//            else if (s[i] == '}' && p[k - 1] != '{')
//            {
//                return false;
//            }
//            else if (s[i] == ']' && p[k - 1] != '[')
//            {
//                return false;
//            }
//            k--;
//        }
//    }
//    if (k != 0)
//    {
//        return false;
//    }
//    return true;
//}

//int* GetLeastNumbers_Solution(int* input, int inputLen, int k, int* returnSize) {
//    // write code here
//    if (k <= 0 || inputLen == 0)
//    {
//        return NULL;
//    }
//    int p[1001] = { 0 };
//    int* arr = (int*)malloc(sizeof(int) * k);
//    for (int i = 0; i < inputLen; i++)
//    {
//        p[input[i]]++;
//    }
//    int n = 0;
//    for (int i = 0; i < 1001; i++)
//    {
//        if (p[i] > 0)
//        {
//            while (p[i])
//            {
//                arr[n] = i;
//                p[i]--;
//                n++;
//                if (n == k)
//                {
//                    break;
//                }
//            }
//        }
//        if (n == k)
//        {
//            break;
//        }
//    }
//    *returnSize = k;
//    return arr;
//}

//int cmp(const void* x1, const void* x2)
//{
//    return *(int*)x2 - *(int*)x1;
//}
//
//int findKth(int* a, int aLen, int n, int K) {
//    // write code here
//    qsort(a, aLen, sizeof(int), cmp);
//    return a[K - 1];
//}

//int cmp(const void* x1, const void* x2)
//{
//    return *(int*)x1 - *(int*)x2;
//}
//int* twoSum(int* numbers, int numbersLen, int target, int* returnSize) {
//    // write code here
//    int arr[100001] = { 0 };
//    int i = 0;
//    for (i = 0; i < numbersLen; i++)
//    {
//        arr[i] = numbers[i];
//    }
//    qsort(numbers, numbersLen, sizeof(int), cmp);
//    int left = 0;
//    int right = numbersLen - 1;
//    while (left < right)
//    {
//        if (numbers[left] + numbers[right] > target)
//        {
//            right--;
//        }
//        else if (numbers[left] + numbers[right] < target)
//        {
//            left++;
//        }
//        else if (numbers[left] + numbers[right] == target)
//        {
//            break;
//        }
//    }
//    int* p = (int*)malloc(sizeof(int) * 2);
//    int m = 0;
//    for (i = 0; i < numbersLen; i++)
//    {
//        if (arr[i] == numbers[left] || arr[i] == numbers[right])
//        {
//            p[m] = i + 1;
//            m++;
//        }
//    }
//    *returnSize = 2;
//    return p;
//}